有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中,什么更适合于网络?UDP还是TCP?

在java中,mmo游戏应该使用什么。UDP还是TCP?为什么?TCP是一种点对点关系,它承载每个数据包,而UDP没有点对点关系,它可以丢弃数据包,从而导致延迟。在这个场景中,哪一个更好


共 (5) 个答案

  1. # 2 楼答案

    我对UDP和TCP的经验如下:

    • UDP的速度明显加快。我们说的是两个数量级
    • 在有线网络上,UDP数据包丢失率小于1%
    • 在无线网络上,UDP数据包的丢失率很容易达到80%,而到路由器的物理距离很重要:在一英尺之外,你会丢失20%的数据包,在20英尺之外,你会丢失50%的数据包

    所以UDP对于非必要的东西是好的。例如,如果两个家伙在你的游戏中四处奔跑,玩家A每100毫秒通过UDP接收玩家B的当前坐标和速度,那么玩家A可以推断一段时间而不会走得太远。另一方面,如果玩家A的房子已经满了,而玩家B的房子已经和皇室齐平,情况就不同了

    在我的项目中,我使用UDP作为主要通信方案,每个接收器都会发回一个通知。如果通信失败的时间超过X,我会求助于TCP

  2. # 3 楼答案

    这个问题实际上与Java无关。UDP数据报不能保证到达目的地,TCP数据报是。连续的UDP数据报也可能无序地到达目的地。例如,DNS基于UDP,因为请求和响应只需要一个数据报。如果您需要可靠性,不想执行重试。TCP是你的选择。如今,计算开销非常小,因此我认为支持UDP不会带来太多性能提升

  3. # 4 楼答案

    不管是不是Java,TCP和UDP都有与语言无关的优点和缺点

    但通常情况下,它归结为一个基本的设计问题:当数据包被丢弃时,会发生什么

    1. 假装从未发生过。这是我们的地盘
    2. 等待数据包重新发送。这就是应该使用TCP的地方

    这两种方法本身都不是对的或错的,都会在游戏中造成问题,但这是你应该首先回答的问题

  4. # 5 楼答案

    答案不取决于语言,而是取决于游戏的要求

    如果你的游戏可以处理玩家(或服务器)状态更新,或者是丢失,或者是出现故障,那么UDP就可以了

    如果您需要具有最小延迟的实时响应(并且上述问题已经解决),那么您还应该使用UDP

    否则,您应该使用TCP